package jmu.cultural_tourism.dao;

import jmu.cultural_tourism.entity.PostInfo;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Page;
import java.util.List;

/**
 * 帖子表(PostInfo)表数据库访问层
 *
 * @author makejava
 * @since 2025-07-17 10:38:43
 */
@Mapper
public interface PostInfoDao {

    /**
     * 通过ID查询单条数据
     *
     * @param postId 主键
     * @return 实例对象
     */
    PostInfo queryById(Integer postId);

    List<PostInfo> queryAll(@Param("pageable") Pageable pageable);

    List<PostInfo> fuzzyPost(@Param("fuzzyContent") String fuzzyContent, @Param("pageable") Pageable pageable);
    //根据热度降序排序展示
    List<PostInfo> queryAllByLikeDesc(@Param("pageable") Pageable pageable);
    /*查询指定行数据*/
    List<PostInfo> queryAllByLimit(@Param("postInfo") PostInfo postInfo, @Param("pageable") Pageable pageable);
    /*统计总行数*/
    long count(PostInfo postInfo);
    /*新增数据*/
    int insert(PostInfo postInfo);

    long countAll();

    /*批量新增数据*/
    int insertBatch(@Param("entities") List<PostInfo> entities);

    /*批量新增或按主键更新数据*/
    int insertOrUpdateBatch(@Param("entities") List<PostInfo> entities);

    /**
     * 修改数据
     *
     * @param postInfo 实例对象
     * @return 影响行数
     */
    int update(PostInfo postInfo);

    /**
     * 通过主键删除数据
     *
     * @param postId 主键
     * @return 影响行数
     */
    int deleteById(Integer postId);

    /**
     * 通过userId找到用户收藏的帖子
     *
     * @param userId 主键
     * @return 是否成功
     */
    List<PostInfo> queryCollectedPostsByUserId(Integer userId, @Param("pageable") Pageable pageable);

    //查询用户收藏了多少帖子
    long countCollectedPostsByUserId(@Param("userId") Integer userId);

    //验证用户是否收藏了帖子
    int checkPostCollected(@Param("userId") Integer userId, @Param("postId") Integer postId);

    //新增收藏
    int addPostCollection(@Param("userId") Integer userId, @Param("postId") Integer postId);

    //删除收藏
    int deletePostCollection(@Param("userId") Integer userId, @Param("postId") Integer postId);
}

